iT邦幫忙

2026 iThome 鐵人賽

DAY 24
0

今天主要目標是幫記帳 App 加入操作提示,讓使用者在執行動作後,可以知道功能是否成功。
除了提示功能之外,今天也一起優化了多國語言與設定頁面,將介面語言擴充成繁體中文、英文、日文與韓文。

加入操作提示,讓結果被看見
原本 App 有些功能雖然確實執行了,但使用者不一定知道,所以我加入了提示訊息。
像是...

  • 切換語言 → 顯示語言切換成功
  • 更新匯率 → 顯示匯率更新成功
  • 執行其他操作 → 顯示對應結果

用 State 控制提示訊息
在 React 裡,提示訊息也可以透過 State 管理:
https://ithelp.ithome.com.tw/upload/images/20260925/20183949JT7pmRp3VO.jpg

執行功能後更新:
https://ithelp.ithome.com.tw/upload/images/20260925/20183949x5dhzXde5O.jpg

畫面再根據 toast 決定是否顯示:
https://ithelp.ithome.com.tw/upload/images/20260925/201839493J0prklUR1.jpg
整個概念就是:
操作 → setToast() → State 改變 → React 重新渲染 → 顯示提示

讓提示自動消失:
為了避免提示一直留在畫面上,我使用 setTimeout():
https://ithelp.ithome.com.tw/upload/images/20260925/20183949KUd5wyTo0T.jpg
流程可以簡化成:
使用者操作 → 執行功能 → 顯示提示 → 3 秒後清除 → 提示消失

加入多國語言
這次將介面語言整理成四種:

  • 繁體中文
  • 英文
  • 日文
  • 韓文
    我把不同語言的文字集中在 i18n.js:
    https://ithelp.ithome.com.tw/upload/images/20260925/201839497CawrAhyk5.jpg
    這樣不同語言的文字就集中管理,不需要散落在各個元件裡。

讓語言選單跟著資料動態產生
加入日文和韓文後,我發現 Settings Page 的下拉選單還是只有中文和英文。
後來才發現,i18n.js 雖然已經有四種語言,但 是直接寫死的:
https://ithelp.ithome.com.tw/upload/images/20260925/20183949w3OZ2TESYS.jpg
所以我改成直接從 translations 動態產生:
https://ithelp.ithome.com.tw/upload/images/20260925/20183949JleRsVxybv.jpg

Object.keys(translations) 會先取得所有語言的 Key:
https://ithelp.ithome.com.tw/upload/images/20260925/20183949L7rtKkuxVe.jpg

再透過 map() 一個一個轉成 。
其中:
key={langKey} → React 用來識別每個項目
value={langKey} → 代表這個選項的語言代碼
languageNames[langKey] || langKey → 找不到名稱時就直接顯示語言代碼
使用者選擇語言後,會透過 onChange 把結果傳回父元件:
https://ithelp.ithome.com.tw/upload/images/20260925/20183949EDZvUUsJFZ.jpg
整個流程可以簡化成:
translations → Object.keys() → map() → → onChange → 父元件更新 State
這些問題也讓我更能看懂一段程式是怎麼從「資料」一路變成「畫面」,而不是只知道它可以運作。

下面是成果:
https://ithelp.ithome.com.tw/upload/images/20260925/20183949i9XWjWidnv.png
https://ithelp.ithome.com.tw/upload/images/20260925/20183949pqCYKLc0JP.jpg
總結:

  • React State 可以控制提示訊息的顯示與消失。
  • setTimeout() 可以讓提示在幾秒後自動清除。
  • Object.keys() 可以取得物件的所有 Key。
  • map() 可以把資料轉換成 JSX 元素。
  • onChange 可以取得使用者選擇的值,再透過 Callback 傳回父元件。
  • 資料新增後,還要確認資料是否真的有被正確渲染。

上一篇
Day 23|錢包重構與動態存錢目標:讓資料真正連動
下一篇
Day 25|狀態重構與目標刪除聯動:讓不同資料真正同步
系列文
Vibe Coding 實戰手冊:30 天打造具備預算控管與數據視覺化的 React 記帳應用 共 25 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言